package com.lzj.myvideo.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
public class RedisOperator {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * TTL key，以秒为单位，返回给定 key的剩余生存时间(TTL, time to live)。
     * @param key
     * @return
     */
    public long ttl(String key){
        return stringRedisTemplate.getExpire(key);
    }

    /**
     * expire 设置过期时间，单位秒
     * @param key
     * @param timeout
     */
    public void expire(String key,long timeout){
        stringRedisTemplate.expire(key,timeout, TimeUnit.SECONDS);
    }

    /**
     * INCR key，增加key一次
     * @param key
     * @param delta
     * @return
     */
    public long incr(String key, long delta) {
        return stringRedisTemplate.opsForValue().increment(key, delta);
    }

    /**
     * KEYS pattern，查找所有符合给定模式 pattern的 key
     * @param pattern
     * @return
     */
    public Set<String> keys(String pattern) {
        return stringRedisTemplate.keys(pattern);
    }

    /**
     * DEL key，删除一个key
     * @param key
     */
    public void del(String key) {
        stringRedisTemplate.delete(key);
    }

    /**
     * SET key value，设置一个key-value（将字符串值 value关联到 key）
     * @param key
     * @param value
     */
    public void set(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    /**
     * SET key value EX seconds，设置key-value和超时时间（秒）
     * @param key
     * @param value
     * @param timeout
     */
    public void set(String key, String value, long timeout) {
        stringRedisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    /**
     * GET key，返回 key所关联的字符串值。
     * @param key
     * @return
     */
    public String get(String key) {
        return (String)stringRedisTemplate.opsForValue().get(key);
    }

    /**
     * SETLIST 向list中添加元素
     * @param key
     * @param value
     */
    public void setList(String key,String value){
        stringRedisTemplate.opsForList().leftPush(key,value);
    }

    public List<String> getList(String key){ return stringRedisTemplate.opsForList().range(key, 0, -1); }


}